/**********************************************************
 * File description:QPCR.h
 * Function:定义结构体用来存储实验过程中产生的相关数据
 * Current Version: 1.0.0
 * Author: 夏新宇
 * Date: 2022-09-29
 *  -----
 *  Copyright by BoKun Software.
 **********************************************************/

#ifndef QPCR_H
#define QPCR_H
#include "QPCRDB.h"

//ReactionPlate结构体，用来存储一个实验的反应板配置信息
struct ReactionPlate{
    Sample sampleList[96]; //用来存储96个孔位的样本信息
    Target targetList[96][20]; //用来存储96个孔位的靶基因(通道数量),每个孔位的靶基因数量可以是不同的
    QString consumables; //耗材类型
};



// 序列化
inline QDataStream &operator<<(QDataStream &o,const ReactionPlate &reactionPlate)
{
    return o << reactionPlate;
}
// 反序列化
inline QDataStream &operator>>(QDataStream &o,const ReactionPlate &reactionPlate)
{
    return o >> reactionPlate;
}


//WLKData结构体，用来存储一个实验的wlk文件所需的数据
struct WLKData{
    QString experimentName;
    QString experimentId;
    QString divice_name;
    QString device_series;
    QString device_id; // 设备型号
    QString username;
    QString encode;
    QString type;
    QString startTime;
    QString endTime;
    QString reshiWendu;
    ReactionPlate reactionPlate;
    QHash<QHash<QString,QString>,QList<QHash<QString,QString>>> procedureData;
    QList<QList<QHash<QString, QString>>> yingGuangData;
    QString canBi; // 参比荧光
    QString experimentRemarks; // 实验备注
    QString plateRemarks; // 反应版备注
};

// AnalysisTarget 结构体，用来存储数据分析时所用的单个结构体信息
struct AnalysisTarget {
    int id; // 靶基因id
    QString targetName; // 靶基因名
    QString reporter; // 报告基因
    QString yuZhi; // 阈值
    QString jiXianStart; // 起始基线
    QString jiXianEnd; // 结束基线
    bool autoYuZhiOn; // 自动阈值开关
    bool autoJiXianOn; // 自动基线开关
};


#endif // QPCR_H
